#ifndef GAMEPANEL_H
#define GAMEPANEL_H

#include <QtGui>
#include <QDebug>
#include <Tabuleiro.h>
#include <MinMax.h>
#include <FuncaoPerimetroBonus.h>
#include <FuncaoMatrizEstatica.h>
#include <defines.h>

class GamePanel : public QWidget
{
    Q_OBJECT

public:
    GamePanel();

signals:
    void changeTurn(Jogador *j); //Passa a vez para o jogador j;
    void updateStatusBar(QString s);
    void updateScore(int s1, int s2);

public slots:
    void iniciaNovoJogo();
    void alteraMostraTodasJogadas();
    void updatePanel();
    void updateEvalFunc(FuncaoAvaliacao* fnc);
    void updateAILevel(int level);
    void updateTRSpeed(int speed);
    //void recebeJogadaIA(Jogada j);

protected:
     void mouseReleaseEvent(QMouseEvent *event);

private:
    QLabel *fundoJogo;
    QLabel* pecas[8][8]; //Ha! Ponteiro triplo enrustido!
    QPixmap *fundoJogoImg;
    QPixmap *pecaJog1;
    QPixmap *pecaJog2;
    QPixmap *pecaTran;
    QPixmap *pecaDica;

    Tabuleiro* tJogo;
    MinMax* opIA;

    Jogador* p1;
    Jogador* p2;

    bool jogPossiveis[8][8];
    bool semJogadas;
    bool jogoAcabou;
    int casasOcupadas;

    int scorePlayer1;
    int scorePlayer2;

    int trspeed;

    bool mostraTodasDicas;

    /* Em pixels */
    static const int primeiroQuadradoX = 235;
    static const int primeiroQuadradoY = 137;
    static const int tamanhoQuadrado = 68;

    int getQuadradoI(int y);
    int getQuadradoJ(int x);
    void geraJogadasPossiveis(Jogador* jg);
    void humanoJoga(Coordenada c);
    void iaJoga();
    bool jogoNaoAcabou();
    void calculaScore();
    void updatePeca(int i, int j);
};

#endif
